perm filename SPRNG1.SAI[VIS,HPM]1 blob sn#122349 filedate 1974-10-01 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "SPRING"
C00005 00003	MAIN PROGRAM
C00007 ENDMK
C⊗;
BEGIN "SPRING"
REQUIRE "WINNIC.SAI[VIS,HPM]" SOURCE_FILE;

INTEGER WINDOW,WHIPIX,CORWIN;
INTEGER ARRAY FEAT[1:3,1:4,1:200];

WINDOW←12;
MAKPIX(200,200,4); INIWIN(WINDOW);
 BEGIN
 INTEGER CURPIC,PREPIC;
 INTEGER ARRAY PIC[1:2,1:PICSIZ];
 
 INTEGER PROCEDURE HORIZON;
  BEGIN
  INTEGER ARRAY WINS[-1:VERWIN,1:HORWIN];
  INTEGER SUM,I,J,NF;
  INTEGER DX1,DX2,DY1,DY2,T,BST,BSTBST,H,SCANX,SCANY;
  SUM←DOWIN(PIC[PREPIC,1],WINS[1,1]);
  NF←0;
  FOR I←2 STEP 1 UNTIL VERWIN-3 DO
  FOR J←3 STEP 1 UNTIL HORWIN-2 DO
  IF (WINS[I,J] LAND 1)=0 ∧ WINS[I,J]≥SUM THEN
   BEGIN
   FEAT[1,PREPIC,NF←NF+1]←(J-1)*WINDOW+1;
   FEAT[2,PREPIC,NF]←(I-1)*WINDOW+1;
   FEAT[3,PREPIC,NF]←WINS[I,J];
   END;

  WINDOW←CORWIN;
  INIWIN(WINDOW);
  TX←WINDOW/PICWID;
  TY←WINDOW/PICHIG;
  BSTBST←'377777000000;
   DO
    BEGIN
    H←1 BST←0;
    FOR I←1 STEP 1 UNTIL NF%2 DO
    IF FEAT[3,PREPIC,I]>BST ∧ FEAT[3,PREPIC,I]<BSTBST ∧
       FEAT[1,PREPIC,I]≥PICWID/3 ∧ FEAT[1,PREPIC,I]≤2*PICWID/3 THEN
         BEGIN H←I; BST←FEAT[3,PREPIC,I]; END;
    BSTBST←BST;
    SCANY←10; SCANX←60;
    DX1←1 MAX (FEAT[1,PREPIC,H]-SCANX);
    DY1←1 MAX (FEAT[2,PREPIC,H]-SCANY);
    DX2←PICWID MIN (FEAT[1,PREPIC,H]+SCANX+WINDOW-1);
    DY2←PICHIG MIN (FEAT[2,PREPIC,H]+SCANY+WINDOW-1);
    T←BSTCOR(PIC[PREPIC,1],FEAT[1,PREPIC,H],FEAT[2,PREPIC,H],
		FEAT[1,PREPIC,H]+WINDOW-1,FEAT[2,PREPIC,H]+WINDOW-1,
		PIC[CURPIC,1],DX1,DY1,DX2,DY2);
    FEAT[1,CURPIC,H]←DX1; FEAT[2,CURPIC,H]←DY1; FEAT[3,CURPIC,H]←T;
    END UNTIL T≤8 ∨ BST=0;
   RETURN(BST);
   END;
COMMENT MAIN PROGRAM;
 CURPIC←1; PREPIC←2;
 PICTURE(CURPIC);
 WHILE TRUE DO
  BEGIN
  INTEGER N,HORFEAT; BOOLEAN LOST;
  N←0;
  DO			comment acquire a horizon feature;
   BEGIN
   FORWARD(5);
   PICTURE(PREPIC); CURPIC↔PREPIC;
   END UNTIL (HORFEAT←HORIZON)≠0 ∨ (N←N+1)>5;
   STEER((FEAT[1,CURPIC,HORFEAT]-FEAT[1,PREPIC,HORFEAT])/10);

  DO			comment now track it as long as possible;
   BEGIN
   FORWARD(5);
   PICTURE(PREPIC); CURPIC↔PREPIC;
   LOST←LOCFEAT(HORFEAT,PREPIC,CURPIC);
   IF ¬LOST THEN STEER((FEAT[1,CURPIC,HORFEAT]-FEAT[1,3-CURPIC,HORFEAT])/10);
   END UNTIL LOST;
  END;


 END;
END;